#ifndef LIBCELL_MESH_BOOL_H_
#define LIBCELL_MESH_BOOL_H_

#include<Algorithm/intersection_of_two_surfaces.h>
#include<Algorithm/subdivision_of_polygon.h>
#include <tool/libcell_subdivision.h>


#ifdef __cplusplus
extern "C" {
#endif


//m1是要remesh的网格区域
//curve_inter
//mcp是m1到curve的映射
//tree2 是curve的点到返回mesh的点映射
//tree3 是返回mesh的cell到 m1的cell映射。 

//如果稳定就修改,主要对那些没有交线的cell直接返回。

Mesh* remesh_along_intersecting_curve(Node* node_c,Mesh2_Crossover_Point*mcp,Mesh*curve_inter,
    Int_RB_Tree* tree2,Int_RB_Tree* tree3);


//m要切割的网格
//curve相交曲线
//tree储存curve 到 m 的映射(tree是需要传入,不会修改)(curve存在孤立点，所以tree定义域不完全)

//tree4 储存m新建点到m的映射

//tree5是新建cell到原cell id映射
// *************
// 判断切割点，根据该点的联通区域个数
// 比如给定一些faces集合，并以此作为墙，对每个点进行联通区域计算，每个联通区域创建一个点
// 
//**************

void cut_along_curve_mesh(Mesh* m,Mesh* inter_curve,Int_RB_Tree* tree,
    Int_RB_Tree*tree4,Int_RB_Tree* tree5);


// //m1是要remesh的网格区域
// //curve 
// //mcp是m1到curve的映射
// //tree2 是curve的点到返回mesh的点映射
// //tree3 是返回mesh的cell到 m1的cell映射。 

// Mesh* remesh_along_intersecting_curven(Node* m1, Mesh2_Crossover_Point* mcp, 
//     Mesh* curve, Int_RB_Tree* tree2, Int_RB_Tree* tree3);

#ifdef __cplusplus
}
#endif

#endif